跳到主要内容

模拟赛题解/2025.9.12 模拟赛

· 阅读需 7 分钟
Sintle
Developer

T1-甲虫(beetle)

题面

小 K 和小 N 带领一群朋友去乘船渡海。最初一共有 nn 个人,第 ii 个人的体力值为 aia_i。在岸边有一艘船,这艘船的运行规则如下:

  • 每次划船时,船上至少要有 LL 人用于控制船只行驶,同时船上不能承载超过 RR 人。
  • 船上所有人必须体力值 >1>1 才能出发,每使用一次船,船上的人会被运到对岸,此时所有人的体力值减少 (无论往返)。

船可以任意次数往返,你需要判断是否能将所有人运到对岸。

T30,n5×106,1LRn,1ai109T\leq30,\sum n\leq5\times10^6,1\leq L\leq R\leq n,1\leq a_i\leq 10^9

题解

注意到一共至少需要往返 nrrl\lceil\frac{n-r}{r-l}\rceil 次(记为 xx),而每个人最多可以往返 min(x,ai12)\min(x,\lfloor\frac{a_i-1}{2}\rfloor) 次。

因此,只需要所有人的往返次数之和大于 xLxL 次,就一定能到达对岸。

T2-兔子(bunny)

题面

对于一个长度为 mm 的数组 bb,定义一次操作为:选择一个下标 ii 满足 1im1\leq i\leq m,一个整数 jj 满足 2jbi2^j\leq b_i,并将 bib_i 改为 bi(bi2j)b_i\oplus(b_i-2^j)。令 f(b)f(b) 表示对 bb 进行任意次操作后,数组所有元素的按位或的最大值。同时定义序列 bb 的优美度为让数组 bb 的按位或达到 f(b)f(b) 所需的最小操作次数。

现在有一个数组 aa,同时小 K 会给你 qq 个询问,每次询问给定 [l,r][l,r],求 alara_l\sim a_r 构成的子数组的优美度大小,请你回答这个问题。

T,n,q105,0ai109T,\sum n,\sum q\leq10^5,0\leq a_i\leq10^9

题解

令区间 [l,r][l,r] 或值最高位为 kk,那么最大值为 2k+112^{k+1}−1,可以对区间任意一个 2k\geq2^k 的数,操作两次 j=kj=k 得到。说明操作次数只有 0,1,20,1,200 是容易的,重点在于判断 1,21,2。令或值最低/最高为 00 的位为 x,yx,y,那么能操作的数必须满足 [x,y)[x,y) 位为 00,值要 2y\geq 2^y。可以存储 logV\log V 棵线段树,第 ii 棵存每个数 i\geq i 位第一个 11 的位置,这样只要区间查询第 xx 棵线段树的区间极值是否 y\geq y

有可能操作完一个数之后,除了 [x,y)[x,y) 之外的某些位变成 00 了。但这样的数最多只有 logV\log V 个,拎出来单独判断,并对其他 logV\log V 个区间正常 check。

时间复杂度 O(nlognlogV)O(n\log n\log V)

T3-狼(wolf)

题面

C 城正在举行一场盛大的运动会,小 K 和小 Y 作为长跑项目的志愿者,负责记录数据。比赛共进行 mm 轮,有 nn 人参加。第 ii 轮比赛结束后,小 K 和小 Y 会按照以下规则在大小为 2m×n2m\times n 的表格 aa 中记录成绩:令第 jj 个到达终点的运动员编号为 bjb_j,编号为 jj 的运动员的排名为 cjc_j,那么 a2i1,j=bj,a2i,j=cja_{2i−1,j}=b_j,a_{2i,j}=c_j

但赛后小 Y 不慎丢失了表格,幸运的是小 K 记住了 nn 个大小为 2m2m 的可重集 S1SnS_1\sim S_n,其中 SiS_i 表示表格第 ii 列的所有元素。请根据小 K 的记忆,还原出任意一个满足记录规则的表格,或者报告无解。

1n105,1m7,1Si,jn1\leq n\leq10^5,1\leq m\leq7,1\leq S_{i,j}\leq n。

题解

观察到如果存在 jSij\in S_i,那么必然有 iSji\in S_j,且两两对应。于是我们建立一张 nn 个 点的图,将 iiSiS_i 里所有元素连有向边。最后 iji\rightarrow jjij\rightarrow i 的边数如果不相等则无解,否则我们构造证明有解。

a2i1a_{2i−1}a2ia_{2i} 看成一组匹配,等价于我们图中需要找到 mm 组匹配。每个点的度数为 2m2m,跑一遍欧拉回路之后,每条定向后的边 (x,y)(x,y),看成一张新图上左部点 xx 向右部点 yy 的边。

新图用 Hall 定理易证明存在合法匹配,暴力跑网络流是 O(nnm2)O(n\sqrt{n}\cdot m^2) 的,但是因为这是 mm - 正则二分图,所以单次匹配可以做到 O(nlogn)O(n\log n)link),总时间复杂度 O(nm2+nmlogn)O(nm^2+nm\log n)

但实际测出来根号和 log\log 并没有明显的效率差异,所以最后一档只给了 12 分,普通流卡卡常或者换种写法大概也是可以过的。

T4-浣熊(raccoon)

题面

小 H 准备为小 K 写一句拼贴诗,诗句均由小写字母组成。现在小 H 手上有两句相同的诗句 S1=S2S_1=S_2。他希望取出 S1S_1 的一个前缀 PPS2S_2 的一个后缀 QQP,QP,Q 均可以 为空),并把他们拼接成一句新的诗 S=P+QS'=P+Q 送给小 K。

但并不是每一种组合都是优美的。小 K 有一个喜欢的词 TT,如果 SS' 存在一个子串为 TT,那么 SS' 是优美的。请帮助小 H 统计有多少本质不同的拼贴诗 SS',且其是优美的。

定义两句诗 S,TS,T 本质不同当且仅当 ST|S|\not=|T| 或者存在 1imin(S,T)1\leq i\leq min(|S|,|T|)SiTiS_i\not=T_i

1S5×106,1T2S1\leq|S|\leq5\times10^6,1\leq|T|\leq 2|S|

题解

n=Sn=|S|m=Tm=|T|。考虑一个弱化的问题:T=1|T|=1。此时仅要考虑 SS' 本质不同。

对于一个方案 P=S[1:i],Q=S[j:n]P=S[1:i],Q=S[j:n],只统计 S[i+1]S[j]S[i + 1]\not=S[j] 的情况即可做到不重复计数(一个 SS' 只被 P|P| 最大的方案计算到)。回头看包含 TT 的条件,容斥掉 TTPP 或者 QQ 出现的情况,剩下 TT 跨越匹配的出现次数。枚举在原串中开始匹配 TT 的位置 pp

fif_i 表示从 SiS_i 开始能匹配 TT 的最长长度,那么最终 PP 必须为 S[1:p+fp1]S[1:p+f_p−1], 否则要么不合法,要么不满足起始条件 S[i+1]S[j]S[i+1]\not=S[j]。于是我们只需要找到多少个后缀开头能匹配 T[fp+1:m]T[fp+1:m],这个可以通过一遍 Z\text{Z} 函数解决。

最后有个问题是相同的 SS' 可能会匹配多个跨越的 TT。处理方法是前面枚举 pp 的时候钦定其为第一个匹配的开头,容易发现条件是不存在 q<pq<pTTborderT\text{border}\,T',使得 S[q:p1]=T[1:mT]S[q:p−1]=T[1:m−|T'|]

对串 T+ST+S 建立失配树并打标记即可,注意一些边界的细节,总时间复杂度 O(n+m)O(n+m)